package com.clstu.qqclient.qqframe;

import com.clstu.qqclient.service.ClientConnectServerThread;
import com.clstu.qqclient.service.ManageClientConnectServerThread;
import com.clstu.qqcommon.Message;
import com.clstu.qqcommon.MessageType;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
 * 这个类可以用于私发或者群发聊天信息
 */

public class JTextFieldSentMessage extends JFrame{


    //定义一些组件
    JButton btnSend ;
    JTextField txtGetter;
    JTextField txtMsg;

    public JTextField getTxtGetter() {
        return txtGetter;
    }

    JTextArea areaMsg ;
    JPanel sendPanel;//创建面板,用于放置与发送留言有关的组件
    JScrollPane msgPane;//创建带滚动条的面板
    private String userID;
    public JTextFieldSentMessage (String userID) {
        super("用户"+userID+"的聊天框");
        this.userID = userID;
        areaMsg=new JTextArea (10,30); //创建文本域以显示留言
        msgPane=new JScrollPane(areaMsg);//创建带滚动条的面板
        areaMsg.setEditable (false) ;//让文本域不可编辑
        sendPanel=new JPanel();//创建面板,用于放置与发送留言有关的组件
        txtGetter=new JTextField(6);//创建文本框，列数为6,用于输入用户名
        txtMsg=new JTextField(20);//创建文本框，列数为20,用于输入留言信息
        btnSend=new JButton ("发送"); //创建发送按钮

        btnSend.addActionListener(new ActionListener() {//绑定发送按钮的单击事件
            @Override
            public void actionPerformed(ActionEvent e) {
                sent();
            }
        });

        txtMsg.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER){
                    sent();
                }
            }
        });
        JLabel lblGetter=new JLabel( "聊天对象");//创建文本标签
        JLabel lblMsg=new JLabel( "内容");
        sendPanel.add (lblGetter) ; //添加文本标签到面板
        sendPanel.add( txtGetter);
        sendPanel.add (lblMsg) ;
        sendPanel.add (txtMsg) ;
        sendPanel.add(btnSend) ;//添加按钮到面板，到此发送留言面板组合完毕

        this.add (msgPane,BorderLayout.CENTER);//将带滚动条的文本域添加到主窗体，位置为中央
        this.add (sendPanel,BorderLayout.SOUTH);//将发送留言面板添加到主窗体，位置为下方

        this.setLocation(500,300);
        this.setSize (500,200) ;
        this.setVisible (true) ;
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                ManageClientConnectServerThread.getClientConnectServerThread(userID).getHm().remove(txtGetter.getText());
            }
        });

    }

    public JTextFieldSentMessage (String userID,boolean isGroup) {
        super("用户"+userID+"的聊天框(群发)");
        this.userID = userID;
        areaMsg=new JTextArea (10,30); //创建文本域以显示留言
        msgPane=new JScrollPane(areaMsg);//创建带滚动条的面板
        areaMsg.setEditable (false) ;//让文本域不可编辑
        sendPanel=new JPanel();//创建面板,用于放置与发送留言有关的组件
        txtGetter=new JTextField(8);//创建文本框，列数为6,用于输入用户名
        txtGetter.setEditable(false);//设置不可编辑
        txtGetter.setText("所有在线用户");
        txtMsg=new JTextField(20);//创建文本框，列数为20,用于输入留言信息
        btnSend=new JButton ("发送"); //创建发送按钮

        btnSend.addActionListener(new ActionListener() {//绑定发送按钮的单击事件
            @Override
            public void actionPerformed(ActionEvent e) {
                sent1();
            }
        });
        txtMsg.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER){
                    sent1();
                }
            }
        });
        JLabel lblGetter=new JLabel( "聊天对象");//创建文本标签
        JLabel lblMsg=new JLabel( "内容");
        sendPanel.add (lblGetter) ; //添加文本标签到面板
        sendPanel.add( txtGetter);
        sendPanel.add (lblMsg) ;
        sendPanel.add (txtMsg) ;
        sendPanel.add(btnSend) ;//添加按钮到面板，到此发送留言面板组合完毕

        this.add (msgPane,BorderLayout.CENTER);//将带滚动条的文本域添加到主窗体，位置为中央
        this.add (sendPanel,BorderLayout.SOUTH);//将发送留言面板添加到主窗体，位置为下方

        this.setLocation(500,300);
        this.setSize (500,200) ;
        this.setVisible (true) ;
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                ManageClientConnectServerThread.getClientConnectServerThread(userID).getHm().remove(txtGetter.getText());
            }
        });

    }

    private void sent(){//把输入的消息发送到对话框(私发)

        String getter = txtGetter.getText(); //获取用户名
        String msg = txtMsg.getText(); //获取留言信息
        String msg1 = userID + ":     " + msg + "\n"; //组合用户名与留言
        areaMsg.append(msg1); //将信息追加到文本域
        //后台发送消息
        ClientConnectServerThread cCST = ManageClientConnectServerThread.getClientConnectServerThread(userID);
        //构造一个用于聊天的消息
        Message message = new Message(userID,getter , msg, null, MessageType.MESSAGE_COMMON_MES);
        cCST.sentMessage(message);
        cCST.getHm().put(this.getTxtGetter().getText(),this);
        txtMsg.setText("");//清空消息框
    }

    public void sent(String s){
        areaMsg.append(s);
    }

    private void sent1(){//把输入的消息发送到对话框(群发消息)

        String getter = txtGetter.getText(); //获取用户名
        String msg = txtMsg.getText(); //获取留言信息
        String msg1 = userID + "(群发):     " + msg + "\n"; //组合用户名与留言
        areaMsg.append(msg1); //将信息追加到文本域
        //后台发送消息
        ClientConnectServerThread cCST = ManageClientConnectServerThread.getClientConnectServerThread(userID);
        //构造一个用于聊天的消息
        Message message = new Message(userID,getter, msg, null, MessageType.MESSAGE_SENT_ALL);
        cCST.sentMessage(message);
        cCST.getHm().put(this.getTxtGetter().getText(),this);
        txtMsg.setText("");//清空消息框
    }

    public void sent(Message m){
        String sender = m.getSender();
        String content = m.getContent();
        if(m.getMesType().equals(MessageType.MESSAGE_SENT_ALL)){//如果是群发消息
            sender = sender + "(群发)";
        }
        areaMsg.append(sender+":     "+content+"\n");
    }

}